home *** CD-ROM | disk | FTP | other *** search
-
-
-
- FFFFIIIIXXXXAAAADDDDEEEE((((3333)))) FFFFIIIIXXXXAAAADDDDEEEE((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- fixade - misaligned data bus error handler and report generator
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee hhhhaaaannnnddddlllleeee____uuuunnnnaaaalllliiiiggggnnnneeeedddd____ttttrrrraaaappppssss
-
- ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee lllliiiisssstttt____bbbbyyyy____aaaaddddddddrrrr
-
- ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee ssssuuuummmmmmmmaaaarrrryyyy____lllliiiissssttttiiiinnnngggg
-
- ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee pppprrrriiiinnnntttt____uuuunnnnaaaalllliiiiggggnnnneeeedddd____ssssuuuummmmmmmmaaaarrrryyyy
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- _F_i_x_a_d_e is a bus error handler which fields, corrects, and reports bus
- errors arising due to misaligned data in Irix programs. The MIPS
- architecture, for performance reasons, is very restrictive on the
- alignment of data which can be used with its standard instruction set.
- Usually, the compilers can guarantee this alignment, however, some
- situations exist in which this guarantee cannot be made. These
- misalignments may be necessary to satisfy Fortran equivalence statements,
- due to mismatched formal/actual parameter types, or due to user-
- instructed suppression of common block padding (via use of the -_a_l_i_g_n
- switches, see _f_7_7(1)). Unless the bus error arising due to a load or
- store from a misaligned address is caught, it will cause unexpected
- program failure.
-
- Routines in the _f_i_x_a_d_e package provide a bus error handler to catch these
- errors, correct them, and allow the program to continue execution. They
- also provide a reporting facility so that the causes of these errors can
- be located and remedied.
-
- None of the routines of _f_i_x_a_d_e have arguments. The routine
- hhhhaaaannnnddddlllleeee____uuuunnnnaaaalllliiiiggggnnnneeeedddd____ttttrrrraaaappppssss _m_u_s_t be called to initialize the handler. If a
- misaligned reference is encountered prior to calling this initialization
- routine, the reference will produce a core dump. No other routines of the
- trap handler may be called prior to calling this initialization routine.
-
- No other routines of the trap handler need to be called unless a report
- of misaligned references is desired. A report of misaligned references
- consists of two portions: a summary of the types of misaligned
- instructions, their counts and relative frequency. (e.g., 'half aligned
- load-word occurred fifteen times, and accounted for 2% of all misaligned
- references'); and a listing based either on the instruction addresses at
- which the faults occurred, _o_r the data addresses producing the faults.
-
- This listing is either an _e_x_h_a_u_s_t_i_v_e listing (default), or a _s_u_m_m_a_r_y
- listing. The summary listing will list the address (either instruction
- or data, as opted) associated with the fault, and its absolute and
- relative frequency, as a percentage. The exhaustive listing will list
- _a_l_l instruction/data address pairs producing a fault. This listing will
- be sorted by the address on which the listing is based (i.e., by
- instruction address or data address). By default, the listing is
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- FFFFIIIIXXXXAAAADDDDEEEE((((3333)))) FFFFIIIIXXXXAAAADDDDEEEE((((3333))))
-
-
-
- exhaustive. If only a summary of misalignment errors is desired, the
- routine ssssuuuummmmmmmmaaaarrrryyyy____lllliiiissssttttiiiinnnngggg must be called immediately after the
- initialization routine.
-
- Also by default, the listing is based on instruction addresses. If it is
- desired to base the listing on data addresses, the routine lllliiiisssstttt____bbbbyyyy____aaaaddddddddrrrr
- must be invoked during initialization.
-
- Prior to program exit, the routine pppprrrriiiinnnntttt____uuuunnnnaaaalllliiiiggggnnnneeeedddd____ssssuuuummmmmmmmaaaarrrryyyy may be called
- to print the listing of bus error events, in either _s_u_m_m_a_r_y or _e_x_h_a_u_s_t_i_v_e
- format, as described previously. This listing will go to the standard
- output. A sample line of this listing in summary format might be
-
- 0x0042445c 1536 33% 67%
-
- where 0x0042445c is the address associated with 1536 faults (33% of the
- total). The final percentage is cumulative. Whether the address is of
- the data causing the fault or the instruction at which it occurred is
- indicated in a printed heading.
-
- New options have been added to _f_7_7(1) to generate (much slower) code
- which tolerates misalignments (see _f_7_7(1)). As discussed previously, use
- of these options will suppress the padding of common usually done by the
- fortran compiler to align elements. They will also generate code which
- uses pessimistic code sequences to avoid bus errors due to misalignment.
- No bus errors due to misaligned data will occur in modules compiled with
- these new options.
-
- Users desiring to find and repair instances of misaligned data may use
- either instruction addresses to decide which modules need to be specially
- compiled (see _f_7_7(1)), or data addresses to find misalignments. In
- either case, a symbol table listing produced by _n_m(1), using the -Bgn
- options, will be necessary to map the addresses to routine (or common
- block) names.
-
- NNNNOOOOTTTTEEEESSSS
- Similar functionality is available from the Irix kernel by way of the
- _s_y_s_m_i_p_s(_2) call. This, too, handles the unaligned data traps and
- emulates the memory reference in software but does not generate any
- reports at program termination.
-
- The use of _f_i_x_a_d_e._o is intended for diagnostic purposes only. Program
- efficiency may be severely impacted by its use. In addition, programs
- using _f_i_x_a_d_e._o may fail to work under future releases of the operating
- system or on future processors.
-
- FFFFIIIILLLLEEEESSSS
- /usr/lib/fixade.o
- /usr/lib32/mips3/fixade.o
- /usr/lib32/mips4/fixade.o
- /usr/lib64/mips3/fixade.o
- /usr/lib64/mips4/fixade.o
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- FFFFIIIIXXXXAAAADDDDEEEE((((3333)))) FFFFIIIIXXXXAAAADDDDEEEE((((3333))))
-
-
-
- AAAAUUUUTTTTHHHHOOOORRRR
- Larry Weber
- Greg Boyd
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- f77(1), sysmips(2)
-
- DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
- When making an exhaustive listing, the trap handler's tables may
- overflow. If this occurs, the message
-
- _n_u_m_b_e_r events not listed due to insufficient table size.
-
- will be printed at the end of the listing.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-